如何用bvp4c Matlab求解两个方程? 您所在的位置:网站首页 matlab bvp4c函数 如何用bvp4c Matlab求解两个方程?

如何用bvp4c Matlab求解两个方程?

2024-07-10 02:36| 来源: 网络整理| 查看: 265

我需要解两个微分方程,每个方程都有两个边界条件。正因为如此,我选择了Matlab方法bvp4c来解决这个问题:

p1' = -32 * beta * m1 / (R ^ 4 * p1) p2' = - ( - 8 * p1' / R - p1' * p2 - 32 * beta * m2 / R ^ 4 ) / p1

我有函数文件bvpfcn.m,我在其中定义了两个微分方程:

代码语言:javascript复制function dpdz = bvpfcn(z,p) beta = 1; m1 = 1; m2 = 0.1; ri = 0.7; z = linspace(0,1,1001); R = ri - z .* (ri - 1); dpdz = zeros(2,1001); dpdz = [- 32 .* beta .* m0 ./ (R .^ 4 .* p(1)); -( - 8 .* dpdz(1) ./ R - dpdz(1) .* p(2) - 32 .* beta .* m1 ./ R .^ 4 ) ./ p(1); ]; end

然后在函数文件bcfcn.m中定义了边界条件。我的边界条件是:

p(1)|(z=0) = 8

p(1)|(z=1) = 1

p(2)|(z=0) = 0

p(2)|(z=1) = 0

文件bcfcn.m为:

代码语言:javascript复制function res = bcfcn(pa,pb) res = [pa(1)-8; pa(2); pb(1)-1; pb(2)]; end

我的解决方案需要是这样的:shape of expected solution

由于这个形状,我做了余弦型的猜测函数:

代码语言:javascript复制function g = guess(z) g = [0.65.*cos(z) 0.65.*cos(z)]; end

当我使用以下命令执行所有操作时:

代码语言:javascript复制beta = 1; m1 = 1; m2 = 0.1; ri = 0.7; xmesh = linspace(0,1,1001); solinit = bvpinit(xmesh, @guess); sol = bvp4c(@bvpfcn, @bcfcn, solinit);

我收到错误:

代码语言:javascript复制Error using bvparguments (line 111) Error in calling BVP4C(ODEFUN,BCFUN,SOLINIT): The boundary condition function BCFUN should return a column vector of length 2. Error in bvp4c (line 130) bvparguments(solver_name,ode,bc,solinit,options,varargin);

当我有4个边界条件时,如何生成列向量?我的假设正确吗?



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有